home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 (Developer) [x86] / NeXT Step 3.1 Intel dev.cdr.dmg / NextDeveloper / Examples / AppKit / Draw / graphicsUndo.subproj / GraphicsChange.m < prev    next >
Text File  |  1993-01-05  |  3KB  |  129 lines

  1. #import "drawundo.h"
  2.  
  3. /*
  4.  * Please refer to external documentation about Draw
  5.  * with Undo for information about what GraphicsChange 
  6.  * is and where it fits in.
  7.  */
  8.  
  9. @interface GraphicsChange(PrivateMethods)
  10.  
  11. - undoDetails;
  12. - redoDetails;
  13.  
  14. @end
  15.  
  16. @implementation GraphicsChange
  17.  
  18. - initGraphicView:aGraphicView
  19. {
  20.     [super init];
  21.     graphicView = aGraphicView;
  22.     graphics = nil;
  23.     changeDetails = nil;
  24.  
  25.     return self;
  26. }
  27.  
  28. - initGraphicView:aGraphicView forChangeToGraphic:aGraphic
  29. {
  30.     [self initGraphicView:aGraphicView];
  31.     graphicsToChange = [[List alloc] initCount:1];
  32.     [graphicsToChange addObject:aGraphic];
  33.     return self;
  34. }
  35.  
  36. - free
  37. {
  38.     [graphics free];
  39.     [graphicsToChange free];
  40.     if (changeDetails != nil) {
  41.     [changeDetails freeObjects];
  42.     [changeDetails free];
  43.     }
  44.  
  45.     return [super free];
  46. }
  47.  
  48. - saveBeforeChange
  49. {
  50.     List *selectedGraphics;
  51.     int i, count;
  52.     id changeDetailClass, changeDetail;
  53.     BOOL changeExpected = NO;
  54.  
  55.     if (!graphicsToChange) {
  56.     selectedGraphics = [graphicView selectedGraphics];
  57.     } else {
  58.     selectedGraphics = graphicsToChange;
  59.     }
  60.     count = [selectedGraphics count];
  61.     if (count == 0) {
  62.         [self disable];
  63.     } else {
  64.     changeDetailClass = [self changeDetailClass];
  65.     if (changeDetailClass != nil)
  66.         changeDetails = [[List alloc] init];
  67.     else
  68.         changeExpected = YES;
  69.     graphics = [[List alloc] init];
  70.     for (i = 0; i < count; i++) {
  71.         [graphics addObject:[selectedGraphics objectAt:i]];
  72.         if (changeDetailClass != nil) {
  73.         changeDetail = [[changeDetailClass alloc] initGraphic:[selectedGraphics objectAt:i] change:self];
  74.         changeExpected = changeExpected || [changeDetail changeExpected];
  75.         [changeDetails addObject:changeDetail];
  76.         }
  77.     }
  78.     }
  79.     
  80.     if (!changeExpected)
  81.         [self disable];
  82.     
  83.     return self;
  84. }
  85.  
  86. - undoChange
  87. {
  88.     [graphicView redrawGraphics:graphics afterChangeAgent:self performs:@selector(undoDetails)];
  89.     [[graphicView window] flushWindow];
  90.     [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; 
  91.  
  92.     return [super undoChange];
  93. }
  94.  
  95. - redoChange
  96. {
  97.     [graphicView redrawGraphics:graphics afterChangeAgent:self performs:@selector(redoDetails)];
  98.     [[graphicView window] flushWindow];
  99.     [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; 
  100.  
  101.     return [super redoChange];
  102. }
  103.  
  104. - changeDetailClass
  105. /*
  106.  * To be overridden 
  107.  */
  108. {
  109.     return [ChangeDetail class];
  110. }
  111.  
  112. - undoDetails
  113. /*
  114.  * To be overridden 
  115.  */
  116. {
  117.     return self;
  118. }
  119.  
  120. - redoDetails
  121. /*
  122.  * To be overridden 
  123.  */
  124. {
  125.     return self;
  126. }
  127.  
  128. @end
  129.